(运维篇)MySQL CRON 定时全量备份

前言

  在互联网中,数据就是金钱,为了防止出现数据丢失无法找回的意外,通常都会对数据库做定期备份动作。
  那么,MySQL 如何实现此目的呢?

  下面,我们就使用 MySQL 自带的 mysqldump 命令结合 Linux 的 crontab 工具来定时全量备份数据!

备份准备工作

目录准备

1
2
3
4
5
6
# mysql 备份脚本
mkdir -p /data/mysql/backup/scripts
# mysql 备份文件
mkdir /data/mysql/backup/files
# mysql 备份日志
mkdir /data/mysql/backup/logs

脚本准备

新建完整备份脚本

1
vim /data/mysql/backup/scripts/backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
# 当前日期
curTime=`date +'%Y%m%d'`
# 记录的日志文件
BACKUP_LOG_FILE=/data/mysql/backup/logs/backup.log
# 备份根目录
BACKUP_ROOT_DIR=/data/mysql/backup/files/
# 数据库密码
pwd='123456'
# 数据库名
database=test
# 备份文件保存时间
expireDay=7

# 执行备份脚本
## --ignore-table 参数指定忽略的日志表
mysqldump -uroot -p${pwd} ${database} --ignore-table=${database}.trace_operate_log > ${BACKUP_ROOT_DIR}${curTime}_backup.sql

echo "[INFO] $(date +%Y-%m-%d_%H:%M:%S) mysql backup file generate done" >> ${BACKUP_LOG_FILE}

# 执行压缩脚本
tar -czf ${BACKUP_ROOT_DIR}${curTime}_backup.tar.gz -C${BACKUP_ROOT_DIR} ${curTime}_backup.sql

echo "[INFO] $(date +%Y-%m-%d_%H:%M:%S) mysql backup compress done" >> ${BACKUP_LOG_FILE}

# 移除未压缩文件
rm -f ${BACKUP_ROOT_DIR}${curTime}_backup.sql
echo "[INFO] $(date +%Y-%m-%d_%H:%M:%S) mysql backup done" >> ${BACKUP_LOG_FILE}
echo " " >> ${BACKUP_LOG_FILE}

# 删除过期数据
find ${BACKUP_ROOT_DIR} -type f -mtime +${expireDay} -name "*.gz" -exec rm -rf {} \;

赋予权限

1
chmod u+x /data/mysql/backup/scripts/backup.sh

测试

1
2
# 执行备份脚本后,若 /data/mysql/backup/files 下存在相应文件则备份成功
sh /data/mysql/backup/scripts/backup.sh

定时执行脚本

安装 crontab

1
yum install -y crontab

创建定时备份任务

1
2
3
4
5
6
7
8
# 添加定时任务
crontab -e

# 每天凌晨3点执行
00 3 * * * sh /data/mysql/backup/scripts/backup.sh

# 查看定时任务
crontab -l

恢复

1
2
3
4
5
cd /data/mysql/backup/files/
# 解压相关压缩文件
tar -zxvf xxx_backup.tar.gz
# 进行恢复操作
mysql -uroot -p123456 test < backup.sql

文章信息

时间 说明
2021-02-13 初稿
0%